package com.stargate.soft.scenario;

import java.sql.SQLException;
import java.util.ArrayList;

import com.stargate.bd.ConnectionBD;
import com.stargate.bd.bean.Affectation;
import com.stargate.bd.bean.Badge;
import com.stargate.bd.bean.Etat;
import com.stargate.bd.bean.Personne;
import com.stargate.bd.dao.DAOFactory;
import com.stargate.bd.dao.factory.BadgeDAO;

public class CreerPersonne {

	private Badge badge;
	
	public CreerPersonne(Personne personne, Affectation affectation) throws SQLException {
		// transaction Serializable
		ConnectionBD.setSerializable();
		
		// récupération d'un badge non affecté sinon création d'un badge
		BadgeDAO badgeDAO = new BadgeDAO();
		ArrayList<Badge> badgesNonAffectes = badgeDAO.getBadgesNonAffectes();
		
		// insertion ou activation du badge en BD
		if (badgesNonAffectes.isEmpty()) {
			badge = new Badge(Etat.ENABLE);
			badgeDAO.insert(badge);
			badge.setNumBadge(badgeDAO.getSeqNumBadge());
		} else {
			badge = badgesNonAffectes.get(0);
			badge.enable();
			badgeDAO.update(badge);
		}
		
		// dates d'affectation par défaut
		if (affectation == null) {
			affectation = new Affectation(personne.getIdPersonne(), badge.getNumBadge());
		}
		
		// insertion de la personne en BD
		DAOFactory.getPersonneDAO().insert(personne);

		// insertion de l'affectation en BD
		DAOFactory.getAffectationDAO().insert(affectation);
		
		// commit
		ConnectionBD.commit();
	}

	public Badge getBadge() {
		return badge;
	}

}
